/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ManagedBeans;

import Clube.Clube;
import Clube.ClubeExistenteException;
import Clube.ClubeInexistenteException;
import Geral.ErroInternoException;
import Geral.Fachada;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;

/**
 *
 * @author Ivaldo
 */
@ManagedBean
@SessionScoped
public class ManagedBeanClube {
    
    @EJB
    private Fachada fachada;
    private Clube clube;
    private List<Clube> listaClube;
    private EntityManager em;
    private boolean login;
    
    public ManagedBeanClube(){
        this.clube = new Clube();
    }
    
    public ManagedBeanClube(Clube clube){
        this.clube = clube;
    }

    public Clube getClube() {
        return clube;
    }

    public void setClube(Clube clube) {
        this.clube = clube;
    }

    public boolean isLogin() {
        return login;
    }

    public void setLogin(boolean login) {
        this.login = login;
    }

    public List<Clube> getListaClube() throws ErroInternoException {
        try{
            return this.fachada.listaClube();
        }catch(ErroInternoException e){
            throw e;
        }
    }

    public void setListaClube(List<Clube> listaClube) {
        this.listaClube = listaClube;
    }
    
    public String adicionarClube() throws ClubeExistenteException{
        try{
            this.fachada.adicionarClube(this.clube);
            FacesContext contexto = FacesContext.getCurrentInstance();
            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, null, "Clube cadastrado com sucesso !");
            contexto.addMessage(null, msg);
            this.clube = new Clube();
        }catch(ErroInternoException e){
            FacesContext contexto = FacesContext.getCurrentInstance();
            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Erro Inesperado", "Ocorreu um erro interno inesperado" + e.getMessage());
            contexto.addMessage(null, msg);
        }catch(ClubeExistenteException e){
            FacesContext contexto = FacesContext.getCurrentInstance();
            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Erro Inesperado", "Clube já foi cadastrado" + e.getMessage());
            contexto.addMessage(null, msg);
        }
        return null;
    }
    
    public String removerClube(){
        try{
            this.fachada.removerClube(clube.getId());
            return "lista-html.xhtml";
        }catch(ErroInternoException e){
            return "ErroInterno.xhtml";
        }catch(ClubeInexistenteException e){
            return "ClubeInexistente.xhtml";
        }
    }
    
    public String buscarClube(){
        try{
            this.fachada.buscarClube(clube.getId());
            return "InformacoesClube";
        }catch(ErroInternoException e){
            return "ErroInterno.xhtml";
        }catch(ClubeInexistenteException e){
            return "ClubeInexistente.xhtml";
        }
    }
    
    public String atualizarSenhaClube(){
        return"atualizarsenha-clube.xhtml";
    }
    
    public String senhaAtualizadaClube(){
        try{
            this.fachada.atualizarClube(this.clube);
            return "dadosclube.xhtml";
        }catch(ErroInternoException e){
            FacesContext contexto = FacesContext.getCurrentInstance();
            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro Inesperado", "Ocorreu um erro interno inesperado" + e.getMessage());
            contexto.addMessage(null, msg);
            return null;
        }catch(ClubeInexistenteException e){
            return null;
        }
    }
    
    public String atualizarClube(){
        try{
            this.fachada.atualizarClube(clube);
            FacesContext contexto = FacesContext.getCurrentInstance();
            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, null, "Erro inesperado");
            contexto.addMessage(null, msg);
        }catch(ErroInternoException e){
            FacesContext contexto = FacesContext.getCurrentInstance();
            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro Interno", "Ocorreu um erro inesperado");
            contexto.addMessage(null, msg);
            return null;
        }catch(ClubeInexistenteException e){
            
        }
        return null;
    }
    
    public String loginClube(){
        try{
            this.clube = this.fachada.loginClube(clube.getLogin(), clube.getSenha());
            this.login = true;
            FacesContext contexto = FacesContext.getCurrentInstance();
            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, null, "Cliente logado com sucesso");
            contexto.addMessage(null, msg);
            return "index.xhtml";
        }catch(ErroInternoException e){
            FacesContext contexto = FacesContext.getCurrentInstance();
            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Erro Interno", "Ocorreu um errointerno inesperado! " + e.getMessage());
            contexto.addMessage(null, msg);
        }catch(ClubeInexistenteException e){
            FacesContext contexto = FacesContext.getCurrentInstance();
            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro Interno", "Ocorreu um errointerno inesperado! " + e.getMessage());
            contexto.addMessage(null, msg);
        }return null;
    }
    
    public void logout(){
        login = false;
        this.clube = new Clube();
    }
    
    public List<Clube> listaClube() throws ErroInternoException{
        try{
            List<Clube> listaClubes = this.fachada.listaClube();
            return listaClubes;
        }catch(ErroInternoException e){
            throw new ErroInternoException(e);
        }
    }
}
